import os
import time 
import bitbrowser_api as api
import log
import pyppeteer
import ai_api 
import asyncio
import random
import time
import bot_bingimg as bot

choice_list = ["你是一个员工,用英语写一段话抱怨一下上班的苦,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个教师,用英语写一段话讲述一下你作为老师所背负的光荣使命,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个学生,用英语写一段话抱怨一下学校的问题,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个家长,用英语写一段话抱怨一下你孩子的问题,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你陷入了迷茫,用英写一段话语鼓励一下自己,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个学生,写一段话,你想成为一名教师,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你失恋了,写一段话讲述一下自己的情感故事,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个在校大学生,用英语写一段话讲述一下你今天美好的校园生活,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "你是一个员工,用英语写一段话讲述你在公司里度过了快乐的一天,不要写成信的格式,写成一段,30-100字左右,用英语输出",
               "用英语中的名人名言造一个句子,写一段话,30-100字左右,用英语输出",
               "用英语讲一个心灵鸡汤,写一段话,30-100字左右,用英语输出"]

# 水帖内容模板
water_post_templates = [
    # 简单文字
    "Good morning!", "Have a nice day!", "Nice!", "Awesome!", "Cool!", "Wow!",
    "Happy Monday!", "TGIF!", "Weekend vibes", "Sunday mood", 
    "Just chilling", "Living my best life", "Blessed", "Grateful", "Feeling great!",
    # 热门话题标签组合
    "#love #life #happy", "#instagood #photooftheday #fashion", 
    "#beautiful #beauty #pretty", "#sun #summer #beach", "#fun #friends #family",
    "#motivation #inspiration #positivity", "#travel #wanderlust #adventure",
    "#food #yum #delicious", "#fitness #health #wellness", "#art #creativity #design",
    # 表情符号组合
    "😊🌞🌈", "🎉✨🎈", "🍕🍦🍰", "🐶🐱🐹", "🚗✈️🚢",
    "❤️💚💙", "🔥🌟💫", "🌸🌹🌻", "🎵📚🎮", "📱💻📺"
]

async def wait_random_time(min_time=None, max_time=None):
    """随机等待一段时间"""
    if min_time is None:
        min_time = 1
    if max_time is None:
        max_time = 100
    wait_time = random.randint(min_time, max_time)
    log.Info(f"等待 {wait_time} 秒...")
    time.sleep(wait_time)

def generate_post_content():
    """生成发帖内容"""
    # 随机选择是否发布水帖(根据配置文件中的概率)
    # 让发水帖变成不可能
    if random.random() < -100:
        # 发布水帖
        content = random.choice(water_post_templates)
        log.Info(f"生成水帖内容:{content}")
        content_type = "water_post"
    else:
        # 发布正常AI生成内容
        i = random.randint(0, len(choice_list) - 1)
        content = ai_api.AI_chat(choice_list[i])
        log.Info(f"生成内容:{content}")
        content_type = "ai_content"
    
    # 记录发帖内容类型
    if content_type == "water_post":
        log.Info("本次发布水帖")
    else:
        log.Info("本次发布AI生成内容")
    
    return content

async def click_element(page, selector, timeout=10000):
    """点击指定选择器的元素"""
    try:
        element = await page.waitForSelector(selector, timeout=timeout)
        if element:
            await element.click()
            return True
        else:
            log.Error(f"未找到元素: {selector}")
            return False
    except Exception as e:
        log.Error(f"点击元素失败: {selector}, 错误: {str(e)}")
        return False

async def op_post(ws_link :str):
    try:
        # 连接到浏览器
        browser = await pyppeteer.connect(browserWSEndpoint=ws_link)
        # 打开新页面
        page = await browser.newPage()
        # 导航到指定 URL
        await page.goto("https://www.facebook.com/")
        log.Info(f"成功打开网页: https://www.facebook.com/")
    except Exception as e:
        log.Error(f"连接浏览器或打开网页失败: {str(e)}")
        return False
    
    # 记录开始发帖
    log.Info("开始发帖流程")
    
    '''
    获取照片
    '''
    log.Info("获取照片")
    img_file = bot.download_random_bing_image("美丽风景")
    if not img_file:
        log.Error("未获取到图片文件")
        return False

    '''
    点击发帖框
    '''
    log.Info("上传照片")
    try:
        # 使用更精确的选择器，根据提供的 class 信息
        selector = 'input[type="file"]'
        # 等待上传框加载完成，增加超时时间
        await page.waitForSelector(selector, timeout=10000)
        upload_box = await page.querySelector(selector)

        if upload_box:
            # 上传每张图片
                # 检查文件是否存在
            if not os.path.exists(img_file):
                log.Warning(f"文件 {img_file} 不存在，跳过上传")
            await upload_box.uploadFile(img_file)
            # 增加等待时间，确保上传完成
            await asyncio.sleep(5)  
            # 检查是否上传成功，可根据页面元素判断
            try:
                # 假设上传成功后会出现特定元素，这里需要根据实际情况修改
                await page.waitForSelector('.upload-success-indicator', timeout=2000)
                log.Info(f"文件 {img_file} 上传成功")
            except pyppeteer.errors.TimeoutError:
                log.Warning(f"文件 {img_file} 上传可能失败")
        else:
            log.Warning("未找到上传框元素")   
            return False
    
    except Exception as e:
        log.Error(f"上传照片过程中出错: {str(e)}")
        return False

    '''
    输入帖子内容
    '''
    content = generate_post_content()
    for chr in content:
        await page.keyboard.press(chr)
        time.sleep(0.03)
    
    try:
        log.Info("等待点击发帖按钮")
        # 使用aria-label属性定位发帖按钮
        selector = '[aria-label="发帖"]'
        
        # 等待元素出现并点击
        if await click_element(page, selector):
            log.Info("成功点击发帖按钮")
            # 随机等待一段时间模拟人工操作
            await wait_random_time()
        else:
            return False

    except Exception as e:
        log.Error(f"点击发帖按钮失败: {str(e)}")
        return False
    
    # 记录发帖完成
    log.Info("发帖流程完成")

    # page.keyboard.type("对于你我更喜欢沿途的风景，你呢？")

if __name__ == "__main__":
    ws_link = api.get_pyppeteer_wslink_by_ids(api.get_alive_ids()[0])
    asyncio.get_event_loop().run_until_complete(op_post(ws_link))

